/*
算法3-15 车厢重排
分数 25
作者 陈越
单位 浙江大学

一列挂有 n 节车厢（编号从 1 到 n）的货运列车途径 n 个车站，计划在行车途中将各节车厢停放在不同的车站。假设 n 个车站的编号从 1 到 n，货运列车按照从第 n 站到第 1 站的顺序经过这些车站，且将与车站编号相同的车厢卸下。
货运列车的各节车厢以随机顺序入轨，为方便列车在各个车站卸掉相应的车厢，须重排这些车厢，使得各车厢从前往后依次编号为 1 到 n，这样在每个车站只需卸掉当前最后一节车厢即可。
车厢重排可通过转轨站完成。一个转轨站包含一个入轨，一个出轨和 k 个位于入轨和出轨之间的缓冲轨。缓冲轨用于存储尚未确定输出次序的车厢。重排车厢的规则包含如下三条：

    一个车厢从入轨移至出轨或缓冲轨；
    一个车厢只有在其编号恰是下一个待输出编号时，可移到出轨；
    一个车厢移到某个缓冲轨，仅当其编号大于该缓冲轨中队尾车厢的编号，若多个缓冲轨满足这一条件，则选择队尾车厢编号最大的，否则选择一个空缓冲轨，若无空缓冲轨则无法重排。

请你编写程序实现这个重排算法。
输入格式：

输入在第一行中给出两个正整数 n 和 k，均不超过 100，分别为车厢数量和缓冲轨数量。第二行按入轨顺序给出 n 节车厢的编号，数字间以空格分隔。
输出格式：

按照车厢进入出轨的顺序，输出每节车厢在入轨时的位序（从 0 开始），每个数字占一行。若无法重排，则在一行中输出信息 错误：任务不可能完成。。
输入样例 1：

9 3
5 8 1 7 4 2 9 6 3

输出样例 1：

2
5
8
4
0
7
3
1
6

输入样例 2：

9 2
5 8 1 7 4 2 9 6 3

输出样例 2：

错误：任务不可能完成。
*/

#include <iostream>
#include <vector>
#include <queue>

using namespace std;

// 个车厢移到某个缓冲轨，仅当其编号大于该缓冲轨中队尾车厢的编号，
// 若多个缓冲轨满足这一条件，则选择队尾车厢编号最大的，否则选择一个空缓冲轨。
queue<int>* getBuffer(vector<queue<int>> &buffers, int no) {
    queue<int> *maxBuffer = nullptr;
    queue<int> *emptyBuffer = nullptr;
    for (auto &buffer : buffers) {
        if (buffer.empty()) {
            emptyBuffer = &buffer;
        } else if (buffer.back() < no) {
            if (maxBuffer == nullptr || buffer.back() > maxBuffer->back()) {
                maxBuffer = &buffer;
            }
        }
    }
    if (maxBuffer != nullptr) {
        return maxBuffer;
    } else {
        return emptyBuffer;
    }
}

bool moveToBuffer(vector<queue<int>> &buffers, int no) {
    queue<int> *buffer = getBuffer(buffers, no);
    if (buffer == nullptr) {
        return false;
    }
    buffer->push(no);
    return true;
}

int main() {
    int n, k;
    cin >> n >> k;
    vector<int> carriages(n);
    // 用于记录每个车厢的输出次序
    vector<int> outOrder(n + 1);
    for (int i = 0; i < n; i++) {
        int x;
        cin >> x;
        carriages[i] = x;
        outOrder[x] = i;
    }
    vector<queue<int>> buffers(k);
    int current = 0;
    for (int i = 0; i < n; i++) {
        if (carriages[i] == current + 1) {
            // 当前车厢是下一个待输出编号
            current++;
        } else {
            // 移入缓冲轨
            if (!moveToBuffer(buffers, carriages[i])) {
                cout << "错误：任务不可能完成。" << endl;
                return 0;
            }
        }
    }
    for (int i = 1; i <= n; i++) {
        cout << outOrder[i] << endl;
    }
    return 0;
}